home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbsrtm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-02-16  |  3.1 KB  |  112 lines

  1. (*===========================================================================*)
  2. (* Miscellaneous things                                                      *)
  3. (*                                                                           *)
  4. (*   Copyright 1989, 1990, 1991 by H. Roy Engehausen.  All rights reserved.  *)
  5. (*                                                                           *)
  6. (*===========================================================================*)
  7.  
  8. {$UNDEF DEBUG_SPEED_WAIT}
  9.  
  10. (*===========================================================================*)
  11. (* Set port speed                                                            *)
  12. (*===========================================================================*)
  13.  
  14. PROCEDURE set_port_speed(speed : WORD);
  15.  
  16.   CONST
  17.     port_xmit_not_busy = lsr_8250_tsre OR lsr_8250_thre;
  18.  
  19.   VAR
  20.     r : REGISTERS;
  21.  
  22.   BEGIN;
  23.  
  24.     IF (active_port^.port_type = port_pcpa)
  25.                       OR (active_port^.port_type = port_bpqhost)
  26.                       OR ((active_port^.port_type = port_modem)
  27.                                           AND (active_port ^.modem_freez)) THEN
  28.       EXIT;
  29.  
  30.     {$IFDEF DEBUG_SPEED_WAIT}
  31.       WRITELN('Speed wait start');
  32.     {$ENDIF}
  33.  
  34. {$IFDEF NOTHERE}
  35.     REPEAT
  36.  
  37.       task_switch;
  38.  
  39.       {$IFDEF DEBUG_SPEED_WAIT}
  40.         WRITELN('Speed wait ready');
  41.       {$ENDIF}
  42.  
  43.       r.DX := active_port^.com_number - 1;
  44.       r.AH := 3;
  45.  
  46.       INTR(tnc_interrupt, r);
  47.  
  48.       {$IFDEF DEBUG_SPEED_WAIT}
  49.         WRITELN('AH = ', r.AH, ' -- AX = ', r.AX);
  50.       {$ENDIF}
  51.  
  52.     UNTIL (r.AH AND port_xmit_not_busy) = port_xmit_not_busy;
  53.  
  54.     {$IFDEF DEBUG_SPEED_WAIT}
  55.       WRITELN('Speed wait start');
  56.     {$ENDIF}
  57. {$ENDIF}
  58.  
  59.     r.DX := active_port^.com_number - 1;
  60.     r.AH := 0;
  61.  
  62.     CASE speed OF
  63.       110  : r.AL := 3;
  64.       150  : r.AL := $23;
  65.       300  : r.AL := $43;
  66.       600  : r.AL := $63;
  67.       1200 : r.AL := $83;
  68.       2400 : r.AL := $A3;
  69.       4800 : r.AL := $C3;
  70.       9600 : r.AL := $E3;
  71.       ELSE
  72.         BEGIN;
  73.           window_write_critical_i(active_tcb^.port_chan_s +
  74.                                           + ':Bad speed setting -- ', speed);
  75.           EXIT;
  76.         END;
  77.     END;
  78.  
  79.     INTR(tnc_interrupt, r);
  80.  
  81.     active_port^.cur_rate := speed;
  82.  
  83.   END;
  84.  
  85. (*===========================================================================*)
  86. (* Function to return true if modem is connected                             *)
  87. (*===========================================================================*)
  88.  
  89. FUNCTION test_phone_connect : BOOLEAN;
  90.  
  91.   VAR
  92.     regs : REGISTERS;
  93.  
  94.   BEGIN;
  95.  
  96.     (*-----------------------------------------------------------------------*)
  97.     (* Check the DCD bit                                                     *)
  98.     (*-----------------------------------------------------------------------*)
  99.  
  100.     regs.AX := $0300;
  101.     regs.DX := active_port^.com_number - 1;
  102.  
  103.     signal_place^ := $0200 + LO(signal_place^);
  104.  
  105.     INTR(tnc_interrupt, regs);
  106.  
  107.     signal_place^ := $F800 + LO(signal_place^);
  108.  
  109.     test_phone_connect := (regs.AL AND msr_8250_rlsd) > 0;
  110.  
  111.   END;
  112.